perm filename MSSAUX.F4[MSS,LCS] blob sn#136235 filedate 1974-12-17 generic text, type T, neo UTF8
00100	C THIS AIDS IN EXTRACTING PARTS FROM SCORES - OR PACKING OF .DAT
00200	C   FILES FOR EASIER STORAGE.   
00300	      DIMENSION XN(2000),RSTFAC(8),IV(78),LIST(200),PWDS(250),RN(2000)
00400		1,XWDS(250),STFF(8),NLIST(200),NX(200)
00500	C**** RN MIGHT HAVE TO BE 4000 ******
00600		EQUIVALENCE (XN,NX)
00700	
00800		JT=0
00900		JR=0
01000	72	TYPE 71
01100		ACCEPT 2,N
01200		IF(N.EQ.' ')N='PARTS'
01300		IF(N.NE.'HELP')GO TO 73
01400		TYPE 14
01500		GO TO 72
01600	73	IF(N.NE.'PARTS')GO TO 211
01700	71	FORMAT(' TYPE "MTA", "PARTS", "PACK" OR "UNPACK"  ',$)
01800		REWIND 1
01900	14	FORMAT(' FOR "READ WHICH STAFF#?"  GIVE N1, N2, N3'/'
02000		1 N2=TRANSP. STEPS,  N3=1=WILL BE SAME FOR ALL FILES'/)
02100		TYPE 1
02200		ACCEPT 2,NAME
02300		IF(LOOKD(NAME).GE.0)GO TO 13
02400		TYPE 88
02500		ACCEPT 2,L
02600		IF(L.EQ.'N')GO TO 14
02700	88	FORMAT(' WRITE OVER FILE????  '$)
02800	13	CALL OFILE(1,NAME)
02900		XWDS(1)=1
03000		RM=0
03100		L=1
03200		LX=1
03300		LP=1
03400		TYPE 44
03500		ACCEPT 5,RS
03600	10	IF(JT.EQ.0)GO TO 83
03700		NAME=NAME+2
03800		GO TO 84
03900	86	FORMAT(1XA5)
04000	83	TYPE 3
04100		ACCEPT 2,NAME,JT
04200	C  TYPE ANY NUMBER AFTER NAME AND IT WILL GO TO NEXT LETTER IN ALPH.
04300	84	LK=LP
04400		IF(LOOKD(NAME).GE.0)GO TO 20
04500	C  FOUND NO MORE TO READ
04600		TYPE 86,NAME
04700		JZ=0
04800		IF(RM.NE.0)GO TO 77
04900		TYPE 4
05000		ACCEPT 5,SN,TR,RM
05100		IF(SN.GE.99)GO TO 20
05200		GO TO 77
05300	C TYPE 2ND NUM FOR TRANSPOSE, 3RD NUM FOR ALWAYS SAME STFF.
05400	8	DO 6 K=1,ITEM
05500		J=PWDS(K)
05600		IF(RN(J+1).NE.4)GO TO 80
05700		IF(RN(J).NE.2)GO TO 80
05800	C  FOUND A BAR LINE
05900		RN(J+4)=1
06000		R=RN(J+2)
06100		DO 82 KA=K+1,ITEM
06200		KB=PWDS(KA)
06300		IF(RN(KB+1).NE.4.OR.RN(KB).NE.2)GO TO 82
06400	C  AVOIDS DUPLICATE BARS.
06500		IF(ABS(R-RN(KB+2)).GT..5)GO TO 82
06600		RN(KB+3)=99
06700		RN(KB+1)=0
06800	82	CONTINUE
06900		GO TO 81
07000	80	IF(RN(J+3).NE.SN)GO TO 6
07100		IF(RN(J+1).NE.10)GO TO 85
07200		IF(RN(J).LT.3)GO TO 85
07300		RN(J+5)=0
07400	C  SETS VERT. POS. OF STAFF TO 0.  WHAT ABOUT P6??!
07500	85	JZ=-1
07600	81	JA=PWDS(K+1)
07700		DO 7 KA=J,JA-1
07800		XN(LK)=RN(KA)
07900	7	LK=LK+1
08000		IF(L.LT.250.AND.LK.LE.2000)GO TO 50
08100		TYPE 9
08200		GO TO 20
08300	16	FORMAT(' STAFF NOT FOUND'/)
08400	50	R=XN(LP+1)
08500		IF(TR.NE.0.AND.(R.EQ.1.OR.R.EQ.8.OR.R.EQ.9))GO TO 52
08600	51	XN(LP+3)=RS
08700		L=L+1
08800		LP=LK
08900		XWDS(L)=LP
09000	6	CONTINUE
09100		IF(JZ)GO TO 17
09200		L=JX
09300		LP=JY
09400		TYPE 16
09500		GO TO 10
09600	17	JX=L
09700		JY=LP
09800		RS=RS-1
09900		M=LX+1
10000		J=XWDS(LX)
10100		PWDS(LX)=XWDS(LX)
10200		I=LX
10250		J=1
10300	CC	RA=XN(IFIX(XWDS(I)+2))
10400	24	RA=10000.
10500	C  POSITION
10700		DO 21 K=LX,L-1
10800		R=XN(IFIX(XWDS(K)+2))
10900		IF(R.GT.RA)GO TO 21
11000		I=K
11100		RA=R
11200	21	CONTINUE
11300		IF(RA.EQ.10000)GO TO 23
11400	C  JUMP IF ALL SORTED
11500		JL=XWDS(I)
11600		LA=JL
11700		N=XN(JL)+3
11800	C  NEXT POINTER
11900		PWDS(M)=PWDS(M-1)+N
12000		M=M+1
12100		DO 22 K=J,J+N-1
12200		RN(K)=XN(JL)
12300	22	JL=JL+1
12400		XN(LA+2)=10000
12500	C  PUT IT ASIDE
12600		J=N+J
12700		GO TO 24
12800	23	LB=LX
12900	25	N=PWDS(LB)
13000		R=RN(N+1)
13100		IF(R.GT.2.OR.(R.EQ.1.AND.RN(N).LT.7))GO TO 30
13200	C  LOOK ONLY AT NOTES AND RESTS AND NON-DOUBLE STOPS
13250		S=RN(N+2)
13300		LA=LB
13400	26	LA=LA+1
13450		IF(LA.GE.L)GO TO 30
13500	C  FIND NEXT IMPORTANT ITEM
13600		NA=PWDS(LA)
13700		A=RN(NA+1)
13800		IF(A.GT.4.OR.(A.EQ.4.AND.RN(NA).NE.2))GO TO 26
13900	C  USES ONLY NOTES, RESTS, BARS, CLEFS
14000	34	RX=RN(NA+2)
14100	C  POSITION OF NEXT ITEM
14150		IF(ABS(S-RX).LT..1)GO TO 26
14200		K=9
14300		IF(R.EQ.2)K=7
14400		P=RN(N+K)*10.
14500	C  FINDS RHYTH IN P7 OR P9
14600		IF(P)P=-P
14700		S=RN(N+2)
14800		SX=S+P-RX
14900	C  SPACE DIFFERENCE
15000		DO 29 K=LB+1,L-1
15100		NZ=PWDS(K)+2
15200	29	RN(NZ)=RN(NZ)+SX
15300	30	LB=LB+1
15400		IF(LB.LT.L)GO TO 25
15500	C  GO BACK IF MORE SPACING TO DO
15600		R=200./RN(IFIX(PWDS(L-1)+2))
15700	C `SHRINK FACTOR
15800		DO 31 K=LX,L-1
15900		N=PWDS(K)+2
16000	31	RN(N)=RN(N)*R
16100		DO 32 K=IFIX(PWDS(LX)),IFIX(PWDS(L))
16200	32	XN(K)=RN(K)
16300		DO 33 K=LX,L
16400	33	XWDS(K)=pWDS(K)
16500	C  ALL DONE
16600		LX=L
16700	
16800		IF(RS.GT.-4)GO TO 10
16900	20	L=JX-1
17000		J=1
17100		WRITE(1),L,JY,
17200		1 (XWDS(K),K=1,L+1),(XN(K),K=1,JY-1),J,J,J,J,RSTFAC,STFF,J
17300	15	END FILE 1
17400		CALL EXIT
17500	1	FORMAT(' TYPE OUTPUT FILE NAME  ',$)
17600	2	FORMAT(A5,I)
17700	3	FORMAT(' TYPE FILE NAME  ',$)
17800	4	FORMAT(' READ WHICH STAFF # ?  ',$)
17900	5	FORMAT(5F)
18000	9	FORMAT(' NO ROOM FOR THIS ONE')
18100	44	FORMAT(' TYPE TOP STAFF #  ',$)
18200	
18300	C TO PACK AND UNPACK FILES FOR MSS PRINTING PROG.(FOR STORAGE ONLY)
18400	211	IF(N.EQ.'MTA')GO TO 200
18500		IF(N.EQ.'UNPAC')GO TO 311
18600		TYPE 1
18700		ACCEPT 2,ONAME
18800		REWIND 1
18900		CALL OFILE (1,ONAME)
19000	411	TYPE 511
19100	511	FORMAT(' TYPE FILE NAME OR X(=EXIT)  ',$)
19200		ACCEPT 2,NAME
19300		IF(NAME.EQ.'X'.OR.NAME.EQ.' ')GO TO 811
19400	77	REWIND 21
19500	177	CALL IFILE(21,NAME)
19600	2202	IF(N.EQ.'UNPAC')GO TO 3202
19700		READ(21),ITEM,I,
19800		1 (PWDS(K),K=1,ITEM+1),(RN(K),K=1,I-1),ISCR,(IV(K),K=1,ISCR),
19900		1 LCNT,(LIST(K),K=1,LCNT)
20000		IF(I.NE.0)GO TO 91
20100		TYPE 92
20200		CALL EXIT
20300	92	FORMAT(' **** UNPACK IT FIRST ****')
20400	91	IF(N.EQ.'PARTS')GO TO 8
20500		READ(21)RSTFAC,STFF
20600		IF(JR)GO TO 217
20700		IF(N.EQ.'UNPAC')GO TO 74
20800	
20900		WRITE (1),NAME
21000		WRITE(1),ITEM,I,
21100		1 (PWDS(K),K=1,ITEM+1),(RN(K),K=1,I-1),ISCR,(IV(K),K=1,ISCR),
21200		1 LCNT,(LIST(K),K=1,LCNT),RSTFAC,STFF,K
21300		GO TO 411
21400	911	WRITE(1),ITEM,I,
21500		1 (PWDS(K),K=1,ITEM+1),(RN(K),K=1,I-1),ISCR,(IV(K),K=1,ISCR),
21600		1 LCNT,(LIST(K),K=1,LCNT),K
21700		WRITE(1),RSTFAC,STFF,IBOT,ITOP,K
21800	C***** K IS BECAUSE OF FORTRAN WRITE BUG!!!!!!
21900	CC	IF(N.EQ.'PACK')GO TO 411
22000	811	END FILE 1
22100		IF(N.EQ.'PACK')CALL EXIT
22200		IF(JR)GO TO 216
22300		GO TO 79
22400	3202	READ(21)ITEM,I,(PWDS(K),K=1,ITEM+1),(RN(K),K=1,I-1),ISCR,
22500		1 (IV(K),K=1,ISCR),LCNT,(LIST(K),K=1,LCNT),RSTFAC,STFF
22600		GO TO 74
22700	
22800	200	TYPE 201
22900		REWIND 16
23000		ACCEPT 111,L
23100		IF(L.EQ.'W')GO TO 202
23200	1200	CALL IFILE(16,N)
23300		READ(16)NLIST
23400		IF(L.EQ.'W')GO TO 202
23500		DO 204 KX=1,200
23600		IF(NLIST(KX).EQ.' ')GO TO 205
23700		IF(MOD(KX,16).EQ.0)PAUSE
23800	204	TYPE 112,KX,NLIST(KX)
23900	205	M=1
24000		L=1
24100	209	TYPE 206
24200		ACCEPT 2,NX(M)
24300		REREAD 207,J,N
24400	CZ	IF(N.NE.0)GO TO 208
24500		IF(NX(M).EQ.' ')GO TO 210
24600		M=M+1
24700		GO TO 209
24800	210	J=1
24900	216	IF(NX(J).EQ.' ')GO TO 219
25000		DO 212 KX=L,200
25100		READ(16),NJ,ITEM,I,PWDS,RN,ISCR,IV,LCNT,LIST,
25200		1 RSTFAC,STFF,IBOT,ITOP
25300	212	IF(NJ.EQ.NX(J))GO TO 218
25400	218	NAME=NJ
25500		J=J+1
25600		L=KX+1
25700		GO TO 179
25800	220	FORMAT(' NEW TAPE OR OLD?  ',$)
25900	
26000	202	TYPE 220
26100		ACCEPT 111,LX
26200		IF(LX.EQ.'O')GO TO 1200
26300		CALL OFILE(16,N)
26400		JR=-1
26500		N=0
26600	214	N=N+1
26700		TYPE 3
26800		ACCEPT 203,NLIST(N)
26900		IF(NLIST(N).NE.' ')GO TO 214
27000	213	WRITE(16),NLIST
27100		M=1
27200	215	NAME=NLIST(M)
27300		GO TO 177
27400	217	WRITE(16),NAME,ITEM,I,PWDS,RN,ISCR,IV,LCNT,LIST,
27500		1 RSTFAC,STFF,IBOT,ITOP,K
27600		TYPE 111,K,NAME
27700		M=M+1
27800		IF(M.NE.N)GO TO 215
27900	219	REWIND 16
28000		CALL EXIT
28100	201	FORMAT(' READ OR WRITE?  ',$/)
28200	203	FORMAT(200A5)
28300	206	FORMAT(' TYPE FILE NAME OR NUMS.  ',$)
28400	112	FORMAT(I4,2XA5)
28500	207	FORMAT(2I)
28600	311	TYPE 511
28700		ACCEPT 2,NAME
28800		IF(NAME.EQ.'X'.OR.NAME.EQ.' ')CALL EXIT
28900		CALL IFILE(21,NAME)
29000	79	READ (21,END=75),NAME
29100		GO TO 2202
29200	74	K=' '
29300		TYPE 111,K,NAME
29400		TYPE 76
29500		ACCEPT 2,K
29600		IF(K.EQ.'PASS'.OR.K.EQ.'P')GO TO 79
29700		IF(K.EQ.'X')CALL EXIT
29800		IF(K.NE.' ')NAME=K
29900	179	CALL OFILE(1,NAME)
30000		GO TO 911
30100	75	CALL EXIT
30200	76	FORMAT(' TYPE <CR>, <PASS> OR NEW NAME.  X=EXIT  ',$)
30300	111	FORMAT(A1,A5)
30400	
30500	52	A=XN(LP+4)
30600		XN(LP+4)=A+TR
30700	C TRANSPOSES ONLY BY STAFF STEPS FOR NOW
30800		X=XN(LP+5)
30900		IF(XN(LP+1).EQ.1)GO TO 11
31000		XN(LP+5)=X+TR
31100		GO TO 51
31200	11	IF(TR.EQ.4.AND.AMOD(A,7.0).EQ.0)GO TO 101
31300		IF(AMOD(TR-1.0,7.0).NE.0)GO TO 51
31400	C  NEXT IS FOR Bb TRANSP.
31500		B=AMOD(A+7.0,7.0)
31600		IF(B.NE.0.AND.B.NE.3)GO TO 51
31700	C  FINDS ORIG. E OR B
31800	101	M=AMOD(X,10.0)
31900	C  FINDS ACCID.
32000		X=X-M
32100	C  STEM DIR. AND DECI.
32200		B=3.
32300	C CHANGES FLAT TO NATURAL SIGN.
32400		IF(M.EQ.0.OR.M.EQ.3)B=2
32500	C  NO PROVISION YET FOR ## OR bb
32600		XN(LP+5)=X+B
32700		GO TO 51
32800		END